package simulador;
import java.util.PriorityQueue;

public class Simulador {
	
	private Fregues freguesServico;
	Object parametros;
	final int CHF1 = 0;
	final int CHS1 = 1;
	final int CHF2 = 2;
	final int CHS2 = 3;
	final int SAIDA = 4;
	private double horario = 0;
	final private PriorityQueue<Event> eventList;
	Event evento;
	double u = 1;
	
	public Simulador(double lambda,Object parametros){
		eventList = new PriorityQueue<Event>(10, new Ordenador());
		double horario = 0;
		//inicia com a primeira chegada
		GeradorEvExp random = new GeradorEvExp();
		random.GeradorAleatorio();
		random.setAleatorio();
		
		Fregues primeiroFregues = new Fregues(0, horario);

		Event primeiroEvento = new Event(primeiroFregues,CHF1,horario);
		eventList.add(evento);
		
		int iteracoes = 5;
		while(eventList.size()>0 || iteracoes  >=0){
			evento = eventList.remove();
			horario = evento.getHorario();
			
			if(evento.getEvento() == CHF1){
				Fregues fregues = evento.getFregues();
				fregues.setFila(1);
				evento.setEvento(CHS1);
				eventList.add(new Event(new Fregues(fregues.getId()+1), CHF1, horario+random.geraChegada(lambda)));
			}
			else if (evento.getEvento()==CHS1){
				Fregues fregues = evento.getFregues();
				freguesServico = fregues;
				eventList.add(new Event(fregues,CHF2,horario+random.geraChegada(u)));
			}
			else if(evento.getEvento()==CHF2){
				Fregues fregues = evento.getFregues();
				freguesServico = fregues;
				eventList.add(new Event(fregues,CHS2,horario+random.geraChegada(u)));
			}
			else if(evento.getEvento()==SAIDA){
				freguesServico = null;
			}
			iteracoes--;
		}
	}
	
	public void iniciar(){
		freguesServico = null;
		
	}
	
}
